package org.nutz.lang.util;

import org.nutz.lang.Strings;

public class FloatRange {

	public static FloatRange make(String s) {
		char[] cs = Strings.trim(s).toCharArray();
		int i = 0;
		for (; i < cs.length; i++) {
			char c = cs[i];
			if (c == ',' || c == ':')
				break;
		}
		if (i == cs.length)
			return make(Float.parseFloat(new String(cs)));

		float left = Float.parseFloat(String.valueOf(cs, 0, i));
		
		return make(left, Float.parseFloat(String.valueOf(cs, ++i, cs.length - i)));
	}

	public static FloatRange make(float right) {
		return make(0, right);
	}

	public static FloatRange make(float left, float right) {
		return new FloatRange(left, right);
	}

	private float left;
	private float right;

	private FloatRange(float left, float right) {
		this.left = left;
		this.right = right;
	}

	public boolean in(float n) {
		return n > left && n < right;
	}

	public boolean on(float n) {
		return n == left || n == right;
	}

	public boolean inon(float n) {
		return on(n) || in(n);
	}

	public boolean gt(float n) {
		return n < left;
	}

	public boolean lt(float n) {
		return n > right;
	}

	/**
	 * @param n
	 * @return n >= left && n < right;
	 */
	public boolean linon(float n) {
		return n >= left && n < right;
	}

	/**
	 * @param n
	 * @return n > left && n <= right;
	 */
	public boolean rinon(float n) {
		return n > left && n <= right;
	}

	public float getLeft() {
		return left;
	}

	public void setLeft(float left) {
		this.left = left;
	}

	public float getRight() {
		return right;
	}

	public void setRight(float right) {
		this.right = right;
	}

	public String toString() {
		return String.format("%s:%s", left, right);
	}
}
